<?php
class Auth_ControlPanelController extends XPHP_Controller
{
    public function indexAction()
    {
        return $this->redirect("index", "ControlPanel", "Dashboard");
    }

    #[Model('Areas_Auth_Models_Login')]
    public function loginAction()
    {
        /*
		 * Kiểm tra xem có cookie được lưu không?
		 * Nếu có thì thử đăng nhập với tài khoản được lưu trong cookie
		 * Đăng nhập thành công redirect tới url cũ 
		 * Nếu không hiển thị
		 */
        if (isset($this->cookie->username) && isset($this->cookie->password)) {
            $this->model->username = $this->cookie->username;
            $this->model->password = $this->cookie->password;
            if ($this->model->authorize()) {
                //Thông tin của user
                $user = $this->model->getUser();
                //Kiểm tra xem roles có hợp hệ để truy cập hay không
                if ($roles = $this->_roleValidate($user)) {
                    //Gán session user và role
                    $this->session->user = $user;
                    $this->session->roles = $roles;
                    //Thiết lập ngôn ngữ
                    $this->resource->setLanguage($this->model->language);
                    $modelLanguage = new Areas_Language_Models_Language();
                    $this->session->clang = $this->model->language;
                    $this->session->lang_id = $modelLanguage->getIdLanguage($this->model->language);
                    //Redirect về url cũ
                    //if (isset($this->params[0]))
                    //{
                    //$url = $this->url->decode($this->params[0]);
                    //}
                    //else
                    $url = $this->url->action("index");
                }
                return $this->redirectUrl($url);
            }
        }
        return $this->view();
    }

    public function loginPost(Areas_Auth_Models_Login $model)
    {
        if ($this->model->validate()) {
            if ($this->model->authorize()) {
                //Thông tin của user
                $user = $this->model->getUser();
                //Kiểm tra xem roles có hợp hệ để truy cập hay không
                if ($roles = $this->_roleValidate($user)) {
                    //Gán session user và role
                    $this->session->user = $user;
                    $this->session->roles = $roles;
                    //Gán cookie username, password
                    $this->cookie->username = $this->model->username;
                    $this->cookie->password = $this->model->password;
                    //Thiết lập ngôn ngữ
                    $this->resource->setLanguage($this->model->language);
                    $modelLanguage = new Areas_Language_Models_Language();
                    $this->session->clang = $this->model->language;
                    $this->session->lang_id = $modelLanguage->getIdLanguage($this->model->language);
                    //Redirect về url cũ
                    if (isset($this->params[0]))
                        $url = $this->url->decode($this->params[0]);
                    else
                        $url = $this->url->action("index");
                    return $this->json(
                        array("success" => true, "url" => $url));
                } else
                    return $this->json(
                        array("success" => false,
                             "message" => "Tài khoản không có quyền truy cập!"));
            } else {
                return $this->json(
                    array("success" => false,
                         "message" => "Tên đăng nhập hoặc mật khẩu không chính xác!"));
            }
        } else {
            return $this->json(
                array("success" => false,
                     "message" => "Dữ liệu nhập vào không đúng!"));
        }
    }

    public function logoutAction()
    {
        unset($this->session->user);
        unset($this->session->roles);
        unset($this->cookie->username);
        unset($this->cookie->password);
        return $this->redirect("login");
    }

    public function deniedAction()
    {
        return $this->view();
    }

    /**
     * Kiểm tra role của user
     * @param object $user
     */
    private function _roleValidate($user)
    {
        //Lấy ra toàn bộ quyền của user hiện tại
        $roleMode = new Areas_Auth_Models_Roles();
        $roles = $roleMode->getRoles($user->id);
        //Kiểm tra các roles có phải thuộc nhóm quản trị hay không
        $validRoles = false;
        foreach ($roles as $role) {
            $adminRole = array("Administrator", "Manager");
            if (in_array($role->name, $adminRole)) {
                $validRoles = array();
                $validRoles[] = $role;
            }
        }
        return $validRoles;
    }
}